ORA-00911 invalid character

问题

今天写一个接口,在后台执行SQL查询数据库。在PL/SQL中执行完全正常的语句,放到Flask里就是报错:

1
ORA-00911: invalid character

原因

SQL语句如下:

1
2
select t.content from db.T_SMS_MESSAGE t
where t.mobile = '18610011006' order by t.create_date_time desc;

仔细检查了半天,发现SQL没有任何语法问题,在PL/SQL里执行也完全正常。怀疑过是字符编码问题,也排除了。
最终google一下,发现“都是分号惹的祸”!
我写SQL的时候,习惯在结尾处加上一个”;”。但是,在正式执行的时候,不能将这个分号扔到Oracle的解析器中的,因为Oracle的语法解析器特别严格,就会报出以上的错误出来

解决

去掉结尾的分号

欢迎打赏!